﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace MacroprocesosWPF.Administrador.Administrador.ControUsuario
{
    /// <summary>
    /// Lógica de interacción para Proceso.xaml
    /// </summary>
    public partial class Proceso : UserControl
    {
        private Unimaq.Macroprocesos.AccesoDatos.Empresa selectedEmpresa;
        private Unimaq.Macroprocesos.AccesoDatos.Proceso selectedProcesoPadre;
        private string codigoProcesoPadre;

        public Proceso()
        {            
            InitializeComponent();
            selectedEmpresa = new Unimaq.Macroprocesos.AccesoDatos.Empresa();
        }

        public Proceso(Unimaq.Macroprocesos.AccesoDatos.Proceso proceso) : this()
        { 
            gridProceso.DataContext = proceso;
        }

        public Proceso(Unimaq.Macroprocesos.AccesoDatos.Empresa empresa) : this()
        {
            selectedEmpresa = empresa;
            Unimaq.Macroprocesos.AccesoDatos.Proceso tmpProceso = 
                new Unimaq.Macroprocesos.AccesoDatos.Proceso()
                {
                    IdEmpresa = selectedEmpresa.Id
                };
            gridProceso.DataContext = tmpProceso;
        }

        public Proceso(Unimaq.Macroprocesos.AccesoDatos.Empresa empresa, Unimaq.Macroprocesos.AccesoDatos.Proceso procesoPadre) : this()
        {
            selectedEmpresa = empresa;
            selectedProcesoPadre = procesoPadre;
            Unimaq.Macroprocesos.AccesoDatos.Proceso tmpProceso =
                new Unimaq.Macroprocesos.AccesoDatos.Proceso()
                {
                    IdEmpresa = empresa.Id,
                    IdPadreProceso = procesoPadre.Id
                };

            codigoProcesoPadre = procesoPadre.CodigoProceso;
            gridProceso.DataContext = tmpProceso;
        }

        private void UserControl_Loaded_1(object sender, RoutedEventArgs e)
        {
            this.ListarEmpresa();
            this.ListarProceso();
        }

        private void ListarProceso()
        {
            Unimaq.Macroprocesos.LogicaNegocio.ProcesoBLL procesoBLL = new Unimaq.Macroprocesos.LogicaNegocio.ProcesoBLL();
            cmbProcesoPadre.ItemsSource = procesoBLL.Listar();
            cmbProcesoPadre.DisplayMemberPath = "Nombre";
            cmbProcesoPadre.SelectedValuePath = "Id";
        }

        private void ListarEmpresa()
        {
            Unimaq.Macroprocesos.LogicaNegocio.EmpresaBLL empresaBLL = new Unimaq.Macroprocesos.LogicaNegocio.EmpresaBLL();
            cmbEmpresa.ItemsSource = empresaBLL.Listar();
            cmbEmpresa.DisplayMemberPath = "NombreEmpresa";
            cmbEmpresa.SelectedValuePath = "Id";
        }

        private void GenerarCodigoProceso(int numeroProceso)
        {
            txtCodigo.Text = string.Format("{0}-{1}", codigoProcesoPadre, numeroProceso.ToString().PadLeft(2, '0'));
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.FolderBrowserDialog folderDialog = new System.Windows.Forms.FolderBrowserDialog();

            System.Windows.Forms.DialogResult dr = folderDialog.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                txtAcceso.Text = folderDialog.SelectedPath;
            }
        }

        private void numProceso_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            int valor = txtNumProceso.Value.HasValue ? txtNumProceso.Value.Value : 0;
            GenerarCodigoProceso(valor);
        }

        internal void LimpiarFormulario()
        {
            cmbEmpresa.SelectedIndex = -1;
            cmbProcesoPadre.SelectedIndex = -1;
            txtCodigo.Text = string.Empty;
            txtNombre.Text = string.Empty;
            txtNumProceso.Text = string.Empty;
            txtAcceso.Text = string.Empty;
        }

        private void btnNuevo_Click(object sender, RoutedEventArgs e)
        {
            this.LimpiarFormulario();
        }

        private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            Unimaq.Macroprocesos.AccesoDatos.Proceso nuevoProceso =
                new Unimaq.Macroprocesos.AccesoDatos.Proceso()
                {
                    IdEmpresa = ((Unimaq.Macroprocesos.AccesoDatos.Empresa)cmbEmpresa.SelectedItem).Id,
                    IdPadreProceso = ((Unimaq.Macroprocesos.AccesoDatos.Proceso)cmbProcesoPadre.SelectedItem).Id,
                    CodigoProceso = txtCodigo.Text,
                    Nombre = txtNombre.Text,
                    NumeroProceso = txtNumProceso.Value.Value,
                    RutaAcceso = txtAcceso.Text
                };

            Unimaq.Macroprocesos.LogicaNegocio.ProcesoBLL procesoBLL =
                new Unimaq.Macroprocesos.LogicaNegocio.ProcesoBLL();
            procesoBLL.Registrar(nuevoProceso);

            LimpiarFormulario();
            Notificar();
        }

        private void Notificar()
        {
            AdminPrincipal iuAdmin = Window.GetWindow(this) as AdminPrincipal;
            iuAdmin.cargarArbolProcesos();
        }
    }
}
